/*!
 * 用户分组管理模块
 * @author Sherlock 
 * -------------------------------------------
 * init 初始化你的分组管理
 * 
 */
require( './style.less' );
define( [ 'jquery', 'bigwe_component', 'message' ], function( $, bc, ShowTitleMessage ) {
  var returnParam = {};

  var me = returnParam.$selector = $( '#util_group_manage' );

  return $.extend( returnParam, {
    // 初始化你的分组管理组件 传入一个对象为一个分组管理窗口
    // 传入一个数组对象是多个分组管理弹框
    init: function( groupManageConfig ) {

      if ( groupManageConfig instanceof Array ) {
        for ( var i in groupManageConfig ) {
          if ( i != 0 ) {
            var groupModal = $( '#group_manage', me ).clone()
              .prop( 'id', 'group_manage' + i )
              .attr( 'data-index', i );
            if ( groupManageConfig[ i ].groupType ) {
              groupModal.attr( 'rt', groupManageConfig[ i ].groupType );
            } else {
              groupModal.removeAttr( 'rt' );
            }
            me.append( groupModal );
            returnParam[ '$selector' + i ] = groupModal;
          } else {
            $( '#group_manage', me ).attr( 'rt', groupManageConfig[ i ].groupType );
          }

          addNewGroup.call( $( '.groups_manage', me ).eq( i ) );
        }
      } else /* if(groupManageConfig instanceof Object)*/ {
        $( '#group_manage', me ).attr( 'rt', groupManageConfig.groupType );
        addNewGroup.call( $( '#group_manage', me ) );
      }

      /*添加分组*/
      me.on( 'click', '.add-battery', function() {

        var gorupConfig = groupManageConfig;
        if ( groupManageConfig instanceof Array ) {
          gorupConfig = groupManageConfig[ $( this ).parents( '.groups_manage' ).index() ];
        }
        var $group = $( groupHtmBuild( gorupConfig.dataUnit ) );
        var $appended = $( this ).before( $group );
        $( '.battery-name', $group ).trigger( 'focus' );

      } );

      var blurAddNewGroup = returnParam.blurAddNewGroup = function() {
        /* 失去焦点添加分组和修改分组 */
        var object = $( this );
        var _cgn = $.trim( $( this ).val() );

        if ( /^\s*$/.test( _cgn ) ) {
          object.val( '' );
        }
        var gorupConfig = groupManageConfig;
        if ( groupManageConfig instanceof Array ) {
          gorupConfig = groupManageConfig[ object.parents( '.groups_manage' ).index() ];
        }

        if ( _cgn ) {
          object.prop( "readonly", "readonly" ).addClass( 'readonly' );
          var groupId = object.parent().attr( 'groupID' );
          // 修改还是添加
          if ( groupId ) {
            // 2016年7月13日 sherlockl将参数名抽象出去 程序更灵活
            let dataParam = $.parseJSON( '{"' + gorupConfig.modifyParam.groupId + '": "' + groupId + '", "' + gorupConfig.modifyParam.groupName + '": "' + _cgn + '"}' );

            $.ajax( {
              type: gorupConfig.requestType,
              url: gorupConfig.modifyUrl,
              data: dataParam,
              success: function( data ) {

                if ( typeof data == 'string' ) {
                  data = $.parseJSON( data );
                }

                if ( !data.ret ) {


                  var groupData = gorupConfig.userGroupData;

                  for ( i in groupData ) {

                    if ( groupData[ i ].id * 1 === groupId * 1 ) {
                      groupData[ i ].group_name = _cgn;
                    }

                  }
                  // 2016年7月18日10:10:26 调整回调函数执行位置
                  if ( gorupConfig.modifyCallback ) gorupConfig.modifyCallback( data );
                }
              }
            } );

          } else {
            // 2016年7月13日 sherlockl将参数名抽象出去 程序更灵活
            let dataParam = $.parseJSON( '{"' + gorupConfig.addParamName + '": "' + _cgn + '"}' );
            var rt = object.parents( '.groups_manage' ).attr( 'rt' );
            if ( rt ) dataParam.rt = rt;
            $.ajax( {
              type: gorupConfig.requestType,
              url: gorupConfig.addNewUrl,
              data: dataParam,
              success: function( data ) {

                data = typeof data === 'object' ? data : $.parseJSON( data );
                if ( data == 44444 ) {
                  $( ".battery" ).remove();
                  $( "#group_manage" ).modal( 'hide' );
                  return;
                }
                // 老接口兼容
                if ( data.data ) {
                  data = data.data;
                }
                if ( data ) {
                  // 解决新建的分组无法删除的bug
                  if ( data.id ) {
                    object.parent().attr( 'groupID', data.id );
                  }

                  gorupConfig.userGroupData.push( {
                    'id': data.id,
                    'group_name': _cgn
                  } );
                  // 接口未返回数据时取输入的值
                  data.name || ( data.name = _cgn );

                  // 2016年7月18日10:10:26 调整回调函数执行位置
                  if ( gorupConfig.addCallback ) gorupConfig.addCallback( data );
                }
              }
            } );
          }

        }
      }

      function groupHtmBuild( unit ) {
        var html = '';

        html += '<div class="battery">';
        html += '<input type="text" class="battery-name" maxlength="7" placeholder="请输入分组名"/>';
        html += '<p>';
        html += '<span class="battery-number pull-left">0</span>' + ( unit || '篇' );
        html += '<span title="删除" class="glyphicon glyphicon-trash delete-btn pull-right"></span>';
        html += '</p>';
        html += '</div>';

        return html;
      }

      // 添加已有分组到模态框
      function addNewGroup() {
        var me = this;
        var dataIndex = $( this ).index();
        if ( returnParam[ 'groupLoaded' + dataIndex ] ) {
          return;
        }
        returnParam[ 'groupLoaded' + dataIndex ] = 1;

        if ( !returnParam[ 'intervalID' + dataIndex ] ) {
          returnParam[ 'intervalID' + dataIndex ] = setInterval( loopData, .4e3 );
        }

        function loopData() {
          var groupManage = groupManageConfig,
            groups = groupManage.userGroupData;
          if ( groupManage instanceof Array ) {
            groupManage = groupManage[ dataIndex ];
            groups = groupManage.userGroupData;
          }
          if ( groups ) {
            clearInterval( returnParam[ 'intervalID' + dataIndex ] );
            // 创建分组信息
            for ( var key in groups ) {

              var $group = $( groupHtmBuild( groupManage.dataUnit ) ),
                groupObj = groups[ key ];
              if ( !groupObj.group_name || !groupObj.id ) continue;
              $( '.battery-name', $group )
                .val( groupObj.group_name )
                .addClass( 'readonly' )
                .prop( 'readonly', 'readonly' );

              $( '.battery-number', $group ).text( groupObj.group_num );
              $( '.add-battery', me ).before( $group.attr( 'groupID', groupObj.id ) );

            }
          }
        }
      }

      $( document ).on( {
        'blur': blurAddNewGroup,
        'click': function() { // 单击图文分组名称

          var isDisabled = $( this ).prop( 'readonly' );
          if ( typeof isDisabled != 'undefined' ) {
            $( this ).removeAttr( 'readonly' ).removeClass( 'readonly' ).trigger( 'focus' );
          }

        }
      }, 'input.battery-name' );

      //$(document).on('show.bs.modal', '.groups_manage', addNewGroup);
      $( document ).on( 'click', '.battery .delete-btn', function() {
        var $this = $( this );
        var deleteID = $this.parent().parent().attr( 'groupID' );

        var gorupConfig = groupManageConfig;
        if ( groupManageConfig instanceof Array ) {
          gorupConfig = groupManageConfig[ $this.parents( '.groups_manage' ).attr( 'data-index' ) ];
        }

        // 2016年7月13日 sherlockl将参数名抽象出去 程序更灵活
        var dataParam = $.parseJSON( '{"' + gorupConfig.deleteParamName + '":"' + deleteID + '"}' );
        var rt = $this.parents( '.groups_manage' ).attr( 'rt' );
        if ( rt ) dataParam.rt = rt;
        var deleteUrl = gorupConfig.deleteUrl;
        if ( !deleteID ) deleteUrl = null;
        bc.deleteConfirmShowBottom( {
          obj: this,
          url: deleteUrl,
          param: dataParam,
          type: 'post',
          fun: function( data ) {

            function afterDelete() {
              ShowTitleMessage.show( '删除成功', ShowTitleMessage.showTime );
              $this.parent().parent().remove();
            }
            if ( data ) {
              data = typeof data === 'object' ? data : $.parseJSON( data );
              if ( !data.ret ) {

                afterDelete()
                var groupData = gorupConfig.userGroupData;

                for ( i in groupData ) {

                  if ( groupData[ i ].id * 1 === deleteID * 1 ) {
                    groupData.splice( i, 1 );
                  }

                }

                // 2016年7月18日10:10:26 调整回调函数执行位置
                if ( gorupConfig.deleteCallback ) gorupConfig.deleteCallback( data, deleteID );
              }
            } else {
              afterDelete();
            }
          }
        } );
      } );
    },
    // 提供一个从外部添加分组的方法
    // index参数是要添加的对象的下标  默认为第0个弹框添加
    commonAddGroup: function( groupName, index ) {
      index = index || 0;
      var self = $( '.groups_manage', me ).eq( index );

      $( '.add-battery', self ).trigger( 'click' );
      var addObj = $( '.battery-list .battery', self ).eq( $( '.battery-list .battery', self ).length - 1 ).find( '.battery-name' ).addClass( 'readonly' ).val( groupName );
      returnParam.blurAddNewGroup.call( addObj );
    }
  } );

} );
